package jetbrains.mps.ide.httpsupport.manager.plugin;
/*Generated by MPS */
import org.jetbrains.ide.HttpRequestHandler;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.jetbrains.annotations.NotNull;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.QueryStringDecoder;
import io.netty.channel.ChannelHandlerContext;
import java.io.IOException;
import java.net.URISyntaxException;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.smodel.structure.ExtensionPoint;
import io.netty.handler.codec.http.HttpResponseStatus;
import org.apache.log4j.Level;
public class MPSRequestManager extends HttpRequestHandler {
private static final Logger LOG = LogManager.getLogger(MPSRequestManager.class);
@Override
public boolean isSupported(@NotNull FullHttpRequest request) {
return request.method() == HttpMethod.GET;
}
@Override
public boolean process(@NotNull QueryStringDecoder decoder, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context) throws IOException {
HttpRequest boxedRequest;
try {
boxedRequest = new HttpRequest(request, decoder, context.channel());
} catch (URISyntaxException exception) {
return false;
}
for (IHttpRequestHandlerFactory handlerFactory : Sequence.fromIterable(new ExtensionPoint<IHttpRequestHandlerFactory>("jetbrains.mps.ide.httpsupport.HttpRequestHandlerEP").getObjects())) {
IHttpRequestHandler handler = handlerFactory.create(boxedRequest);
if (handler.canHandle()) {
try {
handler.handle();
} catch (Throwable e) {
handleException(e, handlerFactory, boxedRequest);
} finally {
return true;
}
}
}
return false;
}
public void handleException(Throwable e, IHttpRequestHandlerFactory factory, HttpRequest request) {
String errorHeader = "Request handler '" + factory.getHandlerName() + "' throws exception";
request.sendErrorResponse(HttpResponseStatus.INTERNAL_SERVER_ERROR, errorHeader, e);
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error(errorHeader, e);
}
}
}